package com.atao.baokede.controller;

import com.atao.baokede.pojo.Cart;
import com.atao.baokede.pojo.Result;
import com.atao.baokede.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * 购物车层
 */
@RestController
@RequestMapping("/cart")
public class CartController {

    @Autowired
    private CartService cartService;

    /**
     * 查询某个用户购物车中的所有记录
     *
     * @return 记录列表
     */
    @GetMapping()
    public Result<List<Cart>> findByUserId() {
        List<Cart> cartList = cartService.findByUserId();
        return Result.success(cartList);
    }

    /**
     * 添加购物车记录
     *
     * @param cart 购物车记录（itemId, num,name,spec,price,image）
     * @return 无
     */
    @PostMapping
    public Result insert(@RequestBody Cart cart) {
        Cart cart1 = cartService.findByItemId(cart.getItemId());
        if (cart1 == null || cart1.getStatus() == 2 || !cart.getSpec().equals(cart1.getSpec())) {
            cartService.insert(cart);
            return Result.success();
        }
        return Result.error("此规格商品在购物车已存在");
    }


    /**
     * 更新购物车记录的购买数量
     *
     * @param cartId 购物车id
     * @param num    购买数量
     * @return 无
     */
    @PutMapping("/item")
    public Result<Void> updateNumByCartId(
            @RequestParam Long cartId,
            @RequestParam Long num) {
        cartService.updateNumByItemId(cartId, num);
        return Result.success();
    }

    /**
     * 删除购物车记录
     *
     * @param cartId 商品ID
     * @return 无
     */
    @DeleteMapping("/item/{cartId}")
    public Result<Void> deleteByCartId(@PathVariable Long cartId) {
        cartService.deleteByCartId(cartId);
        return Result.success();
    }

    /**
     * 获取某个用户购物车中的商品总数
     *
     * @return 商品总数
     */
    @GetMapping("/totalCount")
    public Result<Long> getTotalItemCountByUserId() {
        Long count = cartService.getTotalItemCountByUserId();
        return Result.success(count);
    }

    /**
     * 获取选中购物车商品的总价
     *
     * @param CartIds 购物车ID列表
     * @return 商品总价
     */
    @GetMapping("/totalPrice")
    public Result<BigDecimal> getTotalPrice(List<Long> CartIds) {
        BigDecimal price = cartService.getTotalPrice(CartIds);
        return Result.success(price);
    }


    /**
     * 根据商品名称模糊查询购物车记录（可用于搜索功能）
     *
     * @param keyword 关键词
     * @return 购物车记录列表
     */
    @GetMapping("/search")
    public Result<List<Cart>> searchByName(@RequestParam String keyword) {
        List<Cart> cartList = cartService.searchByName(keyword);
        return Result.success(cartList);
    }
}
